home *** CD-ROM | disk | FTP | other *** search
- RULE Gas
- VAR
- collision, (* TRUE if two particles have collided *)
- wall, (* number of walls in the block *)
- new (* new value for cell *)
- BEGIN
- IF cell[1] THEN (* check for wall *)
- new := cell (* if wall nothing changes *)
- ELSE
- collision := (cell[0] = opp[0]) AND (cw[0] = ccw[0])
- wall := cw[1] + ccw[1] + opp[1]
- IF (wall = 1) OR (wall = 3) THEN (* bounce straight back *)
- IF opp[1] THEN
- new := cell
- ELSE
- new := opp[0]
- END
- ELSIF wall = 2 THEN
- IF opp[1] THEN (* bounce off wall *)
- IF ccw[1] THEN
- new := cw[0]
- ELSE
- new := ccw[0]
- END
- ELSE (* slide thru gap *)
- new := opp[0]
- END
- ELSIF collision THEN (* bounce off particle *)
- new := cw[0]
- ELSE
- new := opp[0] (* travel in a straight path *)
- END
- END
- RETURN new
- END